Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.05.2012, 23:35
Новичок на форуме
Отправить личное сообщение для napilnik Посмотреть профиль Найти все сообщения от napilnik
 
Регистрация: 10.05.2012
Сообщений: 3

Передать параметр ajax-запросу
Есть код:

for (i=index; i>=1; i--){
  name = mainAdress + 'data/news/news' + i + '.xml';
  $.get(name, {}, function(xml){
    $(xml).find('document').each(function(){
      $('#n' + i + ' h3').text($(this).find('title').text());
      $('#n' + i + ' small').text($(this).find('date').text());
      $('#n' + i + ' p').text($(this).find('text').text());
    });
  });
}


Но в самом запросе переменная i не видна. Как ее туда передать?
Ответить с цитированием
  #2 (permalink)  
Старый 11.05.2012, 01:08
Аватар для razerxxx
Аспирант
Отправить личное сообщение для razerxxx Посмотреть профиль Найти все сообщения от razerxxx
 
Регистрация: 05.10.2011
Сообщений: 85

попробуй сделать так:
var sendToServer = function(i) {
  $.get(name, {}, function(xml){
    $(xml).find('document').each(function(){
      $('#n' + i + ' h3').text($(this).find('title').text());
      $('#n' + i + ' small').text($(this).find('date').text());
      $('#n' + i + ' p').text($(this).find('text').text());
    });
  });
}
for (i=index; i>=1; i--){
  sendToServer(i);
}
Ответить с цитированием
  #3 (permalink)  
Старый 11.05.2012, 01:11
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

http://javascript.ru/basic/closure#p...-ispolzovaniya
Ответить с цитированием
  #4 (permalink)  
Старый 11.05.2012, 01:22
Новичок на форуме
Отправить личное сообщение для napilnik Посмотреть профиль Найти все сообщения от napilnik
 
Регистрация: 10.05.2012
Сообщений: 3

спасибо, помогло. но страница стала намного дольше грузится( нельзя это как-то оптимизировать?
Ответить с цитированием
  #5 (permalink)  
Старый 11.05.2012, 01:42
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

napilnik,
код который вам дал razerxxx - неправильный.
Она забыл перенести одну строчку из вашего кода
var sendToServer = function(i) {
  var name = mainAdress + 'data/news/news' + i + '.xml';
  $.get(name, {}, function(xml){
    $(xml).find('document').each(function(){
      $('#n' + i + ' h3').text($(this).find('title').text());
      $('#n' + i + ' small').text($(this).find('date').text());
      $('#n' + i + ' p').text($(this).find('text').text());
    });
  });
}
for (i=index; i>=1; i--){
  sendToServer(i);
}

PS не рекомендуется использовать переменную с названием name, так как уже есть такая глобальная переменная.
В вашем первом коде вы похоже как раз и объявили ее как глобальную, а это чревато проблемами, например в Chrome
Ответить с цитированием
  #6 (permalink)  
Старый 11.05.2012, 01:52
Новичок на форуме
Отправить личное сообщение для napilnik Посмотреть профиль Найти все сообщения от napilnik
 
Регистрация: 10.05.2012
Сообщений: 3

а где можно прочитать, какие имена уже заняты?
Ответить с цитированием
  #7 (permalink)  
Старый 11.05.2012, 03:07
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от napilnik
а где можно прочитать, какие имена уже заняты?
http://javascript.ru/ecma/part7#a-7.5.1
Это те, кот оыре в принципе нельзя использовать.
С name же ситуация несколько иная - это свойство объекта window, а значит и глобальная переменная в браузерах, при чем в Chrome она всегда приводится к строке
И чтобы таких проблем не возникало, надо просто не использовать глобальных переменных без крайней необходимости на то, и оборачивать свой код в замыкания, объявляя переменные как локальные для замыкания
Ответить с цитированием
  #8 (permalink)  
Старый 12.05.2012, 23:50
Аватар для razerxxx
Аспирант
Отправить личное сообщение для razerxxx Посмотреть профиль Найти все сообщения от razerxxx
 
Регистрация: 05.10.2011
Сообщений: 85

Ну а вообще ко всему что уже написано - делать аякс запрос в цикле - как-то не очень, хорошо. Т.е работать то оно работает, но внутреннее чувство подсказывает мне что так делать не надо, лучше попробовать как-то это переделать
Ответить с цитированием
  #9 (permalink)  
Старый 13.05.2012, 00:15
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от razerxxx
делать аякс запрос в цикле - как-то не очень, хорошо.
чем именно?
Сообщение от razerxxx
Т.е работать то оно работает, но внутреннее чувство подсказывает мне что так делать не надо
когда кажется - крестится надо
Ответить с цитированием
  #10 (permalink)  
Старый 16.05.2012, 12:49
Профессор
Отправить личное сообщение для tadjik1 Посмотреть профиль Найти все сообщения от tadjik1
 
Регистрация: 07.06.2011
Сообщений: 315

да нет, всё гуд — запросы асинхронные, следующий запускается, не дожидаясь пока выполнится предыдущий.
не волнуйтесь
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как в страницу подгружаемую через AJAX передать $_GET? pagal AJAX и COMET 7 08.11.2011 21:09
Как посредставам одного клика передать ajax 3 переменных Dimario AJAX и COMET 4 14.04.2011 22:13
Передать параметр из фрейма SenseyR Общие вопросы Javascript 2 11.04.2011 14:00
Как в ajax запросе передать файл методом POST mcpro jQuery 1 16.12.2009 11:41
Как передать массив из PHP в js (AJAX) Александр Иванов Общие вопросы Javascript 7 10.09.2009 10:22